Skip to content

[pull] main from fern-api:main#639

Merged
pull[bot] merged 15 commits into
code:mainfrom
fern-api:main
Apr 8, 2026
Merged

[pull] main from fern-api:main#639
pull[bot] merged 15 commits into
code:mainfrom
fern-api:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Apr 8, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

Swimburger and others added 15 commits April 8, 2026 18:43
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* fix(cli): kill entire process group when stopping fern docs dev

When fern docs dev is killed, the cleanup only sent SIGTERM to the
direct child node process, leaving Next.js worker processes (next-server)
running as zombies consuming CPU and holding the port.

Fix by:
1. Spawning the Next.js server with detached: true so it runs in its
   own process group
2. Using process.kill(-pid) to kill the entire process group including
   all child worker processes
3. Closing the file watcher during cleanup to prevent resource leaks

Resolves regression of #7027
Linear: FER-9564

Co-Authored-By: Sandeep Dinesh <sandeep@buildwithfern.com>

* fix: add debug logging to process group kill catch blocks

Co-Authored-By: Sandeep Dinesh <sandeep@buildwithfern.com>

* fix: rewrite cleanup to reliably SIGKILL process group

The previous cleanup had two bugs:
1. serverProcess.killed is set immediately when .kill() is called,
   not when the process actually exits, so the SIGKILL fallback
   check (!serverProcess.killed) always failed
2. Redundant serverProcess.kill() + process.kill(-pid) calls made
   the logic hard to follow

Now cleanup:
- Sends SIGTERM to the entire process group via process.kill(-pid)
- After 2s, checks if the group is still alive via signal 0
- Force kills with SIGKILL if anything survives

Co-Authored-By: Sandeep Dinesh <sandeep@buildwithfern.com>

* use second pass sweep to kill nextjs

* track actual port of next server

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…14754)

fix: normalize Go package name for dynamic snippet IR generation
…patibility (#14757)

fix: use copyFile+unlink instead of rename for Windows EPERM compatibility

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* fix(cli): add log rotation for fern docs dev debug logs

Enforce a 100 MB cap on ~/.fern/logs/. On each fern docs dev startup,
the DebugLogger now scans the logs directory and deletes the oldest
.log files until total size is within the limit.

Closes FER-9568

Co-Authored-By: Sandeep Dinesh <sandeep@buildwithfern.com>

* fix(cli): run log cleanup in background instead of awaiting

Co-Authored-By: Sandeep Dinesh <sandeep@buildwithfern.com>

* fix(cli): add debug log entry when log rotation triggers

Co-Authored-By: Sandeep Dinesh <sandeep@buildwithfern.com>

* fix(cli): add debug log when log size does not exceed cap

Co-Authored-By: Sandeep Dinesh <sandeep@buildwithfern.com>

* fix(cli): output log rotation status to console instead of debug file

Co-Authored-By: Sandeep Dinesh <sandeep@buildwithfern.com>

* fix(cli): move log rotation logic from DebugLogger to runAppPreviewServer

Co-Authored-By: Sandeep Dinesh <sandeep@buildwithfern.com>

* fix(cli): await log rotation so it runs before other startup steps

Co-Authored-By: Sandeep Dinesh <sandeep@buildwithfern.com>

* fix(cli): revert to fire-and-forget for log rotation

Co-Authored-By: Sandeep Dinesh <sandeep@buildwithfern.com>

* fix(cli): move log rotation back to DebugLogger with console logger callback

Co-Authored-By: Sandeep Dinesh <sandeep@buildwithfern.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: patrickthornton <70873350+patrickthornton@users.noreply.github.com>
… enums (#14739)

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* fix(cli): detect header-parameter name collisions in validation

Add no-conflicting-parameter-names OSS validation rule to fern check.
Detects when header parameters and query/path parameters on the same
endpoint normalize to the same camelCase name, which causes broken
generated SDK code (Python SyntaxError from duplicate keyword arguments,
TypeScript duplicate interface properties).

The rule reports an error at validation time so the collision is caught
before code generation.

Co-Authored-By: tanmay.singh <tstanmay13@gmail.com>

* fix(cli): add camelCase-normalized collision detection for Fern definition validator

Co-Authored-By: tanmay.singh <tstanmay13@gmail.com>

* fix(cli): fix biome formatting for getCamelCaseNormalizedCollisions signature

Co-Authored-By: tanmay.singh <tstanmay13@gmail.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: iamnamananand996 <31537362+iamnamananand996@users.noreply.github.com>
Co-authored-by: iamnamananand996 <31537362+iamnamananand996@users.noreply.github.com>
When a branch name is specified, the worktree-add script now fetches
from origin first. If the branch exists remotely, the local branch is
created with --track so it stays connected to the remote branch instead
of being a disconnected local-only branch.

Co-authored-by: jsklan <jsklan.development@gmail.com>
@pull pull Bot locked and limited conversation to collaborators Apr 8, 2026
@pull pull Bot added the ⤵️ pull label Apr 8, 2026
@pull pull Bot merged commit 8f1c3a3 into code:main Apr 8, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants